#!/bin/bash

# 初始化变量
target_ip=""
transfer_all=false

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -all)
            transfer_all=true
            shift
            ;;
        *)
            if [[ -z "$target_ip" ]]; then
                target_ip="$1"
            else
                echo "警告: 忽略未知参数: $1"
            fi
            shift
            ;;
    esac
done

# 检查是否通过参数传递了IP地址，否则提示用户输入
if [ -n "$target_ip" ]; then
    echo "使用传入的目标服务器IP地址: $target_ip"
else
    # 提示用户输入目标IP地址
    read -p "请输入目标服务器IP地址: " target_ip
fi

# 检查是否输入了IP地址
if [ -z "$target_ip" ]; then
    echo "错误: 未输入目标IP地址"
    exit 1
fi

# 显示传输模式
if [ "$transfer_all" = true ]; then
    echo "传输模式: 全部传输 (包括bin和lib目录)"
else
    echo "传输模式: 仅传输bin目录"
fi

# 连接到目标服务器并停止qt.service服务
echo "正在停止qt.service服务..."
ssh -o StrictHostKeyChecking=no root@$target_ip "systemctl stop qt.service"

if [ $? -eq 0 ]; then
    echo "qt.service服务停止成功"
else
    echo "qt.service服务停止失败或服务未运行"
fi

# 连接到目标服务器并杀掉max_module进程
echo "正在杀掉目标服务器上的max_module进程..."
ssh -o StrictHostKeyChecking=no root@$target_ip "pkill max_module"

if [ $? -eq 0 ]; then
    echo "成功杀掉max_module进程或进程不存在"
else
    echo "尝试杀掉max_module进程时出现错误"
fi

# 使用scp命令传输文件到目标服务器的/opt目录下，强制覆盖
# -r 递归复制整个目录
# -o StrictHostKeyChecking=no 自动接受SSH密钥
# -o UserKnownHostsFile=/dev/null 不保存known_hosts
echo "正在传输文件到 $target_ip:/opt/"

if [ "$transfer_all" = true ]; then
    # 传输整个output目录
    scp -r -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ./output/* root@$target_ip:/opt/
else
    # 只传输bin目录
    scp -r -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ./output/bin/* root@$target_ip:/opt/
fi

# 检查传输是否成功
if [ $? -eq 0 ]; then
    echo "文件传输完成"

    # 连接到目标服务器并为所有传输的文件设置777权限
    echo "正在设置文件权限为777..."
    ssh -o StrictHostKeyChecking=no root@$target_ip "chmod -R 777 /opt/*"

    if [ $? -eq 0 ]; then
        echo "权限设置完成"
    else
        echo "权限设置失败"
        exit 1
    fi

    # 创建qt.service符号链接
    echo "正在创建qt.service符号链接..."
    ssh -o StrictHostKeyChecking=no root@$target_ip "ln -sf /opt/bin/qt.service /etc/systemd/system/qt.service"

    if [ $? -eq 0 ]; then
        echo "qt.service符号链接创建成功"
    else
        echo "qt.service符号链接创建失败"
        exit 1
    fi

    # 重新加载systemd配置
    echo "正在重新加载systemd配置..."
    ssh -o StrictHostKeyChecking=no root@$target_ip "systemctl daemon-reload"

    if [ $? -eq 0 ]; then
        echo "systemd配置重新加载成功"
    else
        echo "systemd配置重新加载失败"
        exit 1
    fi

    # 使能服务
    echo "正在使能qt.service服务..."
    ssh -o StrictHostKeyChecking=no root@$target_ip "systemctl enable qt.service"

    if [ $? -eq 0 ]; then
        echo "qt.service服务使能成功"
    else
        echo "qt.service服务使能失败"
        exit 1
    fi

    # 启动服务
    echo "正在启动qt.service服务..."
    ssh -o StrictHostKeyChecking=no root@$target_ip "systemctl start qt.service"

    if [ $? -eq 0 ]; then
        echo "qt.service服务启动成功"
    else
        echo "qt.service服务启动失败"
        exit 1
    fi

    # 查看服务状态和详细日志
    echo "正在获取qt.service服务状态和日志..."
    echo "=== 服务状态 ==="
    ssh -o StrictHostKeyChecking=no root@$target_ip "systemctl status qt.service"

    # echo "=== 详细日志信息 ==="
    # ssh -o StrictHostKeyChecking=no root@$target_ip "journalctl -u qt.service -n 50 --no-pager

    echo "=== 最新实时日志 ==="
    ssh -o StrictHostKeyChecking=no root@$target_ip "timeout 10 journalctl -u qt.service -f --no-pager || true"

else
    echo "文件传输失败"
    exit 1
fi